1
管理容器增长:大小与容量
AI037Lesson 14
00:00

在 C++ 中,管理容器增长是一场在 大小 (当前元素数量)和 容量 (预留内存)之间的权衡。对于像 vectorstring这样的连续容器来说,达到容量上限会触发 重新分配:系统会寻找更大的内存块,将所有元素移动过去,并销毁旧的内存块。这是一个代价高昂的 $O(n)$ 操作,会导致 迭代器失效——你对旧元素的指针将变成“悬空”指针,非常危险。

1. 扩展策略

为了避免频繁的重新分配, vector 实现通常会预先分配一段“缓冲区”空间。使用 c.reserve(n) 命令可显式设置最小容量而不添加元素,而 c.shrink_to_fit() 则是一个非强制性的请求,要求将多余的内存归还给操作系统。

2. resize 与 reserve 的区别

虽然 reserve reserve 只影响缓冲区, resize(n) resize(n) 则会主动改变容器的逻辑。通过 resize 缩小容器会删除元素,而扩展则会添加默认初始化的值。

大小(已用)额外容量总容量
⚠️ 警告: 如果 resize 缩小容器时,指向被删除元素的迭代器将失效。如果扩展导致重新分配, 所有 迭代器都将失效。
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>